package buisness_service;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

public class Rapport {
	public enum Mois {
		Janvier(1), Fevrier(2), Mars(3), Avril(4), Mai(5), Juin(6), Juillet(7), Aout(
				8), Spetembre(9), Octobre(10), Novembre(11), Decembre(12);
		private int value;

		private Mois(int value) {
			this.value = value;
		}

		public int getValue() {
			return value;
		}

	}

	public static Mois[] tab = Mois.values();

	/* = new ArrayList<Depense_mois> () se fait dans le main */
	
	public static  List<PosteDepense> postesDpenses = new ArrayList<PosteDepense>();
	public static  List<PosteRevenu> postesRevenus = new ArrayList<PosteRevenu>();
	public static int index_mois = -1;
	public static int index_annee = -1;
	public static int index_jour = -1;
	public static int nbCategories = 0;
	public static int nbEntities = 0;
	public static int nbUser = 0;

	public static boolean rechercher_mois(int annee, Mois mois, List<Finance_annee> rapport) {
		int i = 0;
		Rapport.index_mois = -1;
		Rapport.index_annee = -1;

		boolean found = false;
		while (i < rapport.size() && found == false) {
			if (rapport.get(i).getAnnee() == annee) {

				Rapport.index_annee = i;
				int j = 0;
				while (j < rapport.get(i).getFinances_mois()
						.size()
						&& found == false) {
					if (rapport.get(i).getFinances_mois().get(j)
							.getMois().getValue() == mois.getValue()) {
						Rapport.index_mois = j;
						found = true;
					}
					j++;
				}

			}
			i++;

		}
		return found;

	}

	public static boolean rechercher_annee(int annee, List<Finance_annee> rapport) {
		int i = 0;
		Rapport.index_mois = -1;
		Rapport.index_annee = -1;
		boolean found = false;
		while (i < rapport.size() && found == false) {
			if (rapport.get(i).getAnnee() == annee) {

				Rapport.index_annee = i;
				found = true;
			}
			i++;
		}
		return found;
	}

	public static boolean rechercher_jour(int annee, Mois mois, int jour,List<Finance_annee> rapport) {
		int i = 0;
		Rapport.index_mois = -1;
		Rapport.index_annee = -1;
		Rapport.index_jour = -1;
		boolean found = false;
		while (i < rapport.size() && found == false) {
			if (rapport.get(i).getAnnee() == annee) {

				Rapport.index_annee = i;
				int j = 0;
				while (j < rapport.get(i).getFinances_mois()
						.size()
						&& found == false) {
					if (rapport.get(i).getFinances_mois().get(j)
							.getMois().getValue() == mois.getValue()) {
						Rapport.index_mois = j;
						int h = 0;
						while (h < rapport.get(i)
								.getFinances_mois().get(j).getFinances_jour()
								.size()
								&& found == false) {
							if (rapport.get(i)
									.getFinances_mois().get(j)
									.getFinances_jour().get(h).getJour() == jour) {

								Rapport.index_jour = h;
								found = true;
							}
							h++;
						}

					}
					j++;
				}

			}
			i++;

		}
		return found;

	}

	public List<Finance_annee> consulter (Calendar date_debut, Calendar date_fin, List<Finance_annee> rapport)
	{
		List<Finance_annee> filtre = new ArrayList<Finance_annee>();
		int annee= date_fin.get(1)- date_debut.get(1);
		int mois =  date_fin.get(2)- date_debut.get(2);
		Rapport.rechercher_jour(date_debut.get(1),Rapport.tab[date_debut.get(2)], date_debut.get(5), rapport);
		for (int i=Rapport.index_annee; i<annee; i++)
		{
			filtre.add(rapport.get(i));
		}
		Finance_annee f = new Finance_annee(date_fin.get(1),rapport);
		filtre.add(f);
		for (int i= Rapport.index_mois; i<mois; i++)
		{
			
			Finance_mois filtre_mois= rapport.get(Rapport.index_annee+annee).getFinances_mois().get(i);
			filtre.get(filtre.size()-1).getFinances_mois().add(filtre_mois);
		}
		//Finance_mois f_m = new Finance_mois()
		return  filtre;
		}
}
